/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package centronotificaciones;

import abstractClasses.AbstractListadoEntidades;
import entities.Notificacion;
import entities.Usuario;
import facades.NotificacionFacade;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import qualifiers.EventoEntidadCreada;
import qualifiers.UsuarioLogeado;

/**
 *
 * @author damfercer
 */
@Named(value = "notificacionesUsuarioBean")
@SessionScoped
public class NotificacionesUsuarioBean extends AbstractListadoEntidades<Notificacion, NotificacionFacade> implements Serializable {
    @Inject
    @UsuarioLogeado
    private Usuario u;
    private List<Notificacion> notificacionesPendientes;
    /**
     * Creates a new instance of NotificacionesUsuarioBean
     */
    public NotificacionesUsuarioBean() {
    }
    
    @PostConstruct
    @Override
    public void init(){
        setFacade(getEntityFacadeInstance().get());
        setNotificacionesPendientes(new ArrayList<Notificacion>());
        this.setListadoEntidades(getFacade().getMultiplicadorDeCategoriaYSexo(u));
        for (Notificacion notificacion : getListadoEntidades()) {
            if(!notificacion.getOk()){
                notificacionesPendientes.add(notificacion);
            }
        }
    }
    
    public void onNuevaNotificacion(@Observes @EventoEntidadCreada Notificacion notificacion){
        this.getListadoEntidades().add(notificacion);
        this.getNotificacionesPendientes().add(notificacion);
    }

    /**
     * @return the notificacionesPendientes
     */
    public List<Notificacion> getNotificacionesPendientes() {
        return notificacionesPendientes;
    }

    /**
     * @param notificacionesPendientes the notificacionesPendientes to set
     */
    public void setNotificacionesPendientes(List<Notificacion> notificacionesPendientes) {
        this.notificacionesPendientes = notificacionesPendientes;
    }
    
    public void darOk(){
        getEntidadElegida().setOk(true);
        getEntidadElegida().setFechaOk(new Date());
        getFacade().edit(getEntidadElegida());
        this.notificacionesPendientes.remove(getEntidadElegida());
    }
}
